package compilarclassejava;

import java.io.File;
import java.util.LinkedList;

import excecoes.CaminhoAteCompiladorNaoAchadoException;

public class ProcuraCaminhoAteCompilador 
{
	public static LinkedList<String> acharCaminhoAtehCompiladoresJava() throws CaminhoAteCompiladorNaoAchadoException 
	{
		LinkedList<String> enderecoCompiladoresJava = new LinkedList<String>();
		String caminhoPastaJava = acharCaminhoPastaJava();
		if(caminhoPastaJava.compareTo("pasta java nao encontrada") == 0)
		{
			
			throw new CaminhoAteCompiladorNaoAchadoException();
		}
		else
		{
			File  diretorioPastajava = new File(caminhoPastaJava);
			File [] subdiretoriosPastaJava =
					diretorioPastajava.listFiles();
			for(int i = 0; i < subdiretoriosPastaJava.length; i++)
			{
				File subdiretorioPastaJava = subdiretoriosPastaJava[i];
				String nomeSubdiretorioPasta = subdiretorioPastaJava.getName();
				if(nomeSubdiretorioPasta.contains("jdk"))
				{
					enderecoCompiladoresJava.add(subdiretorioPastaJava.getAbsolutePath());
				}
			}
			
			if(enderecoCompiladoresJava.isEmpty() == true)
			{
				
				throw new CaminhoAteCompiladorNaoAchadoException();
			}
			else
			{
				return enderecoCompiladoresJava;
			}
		}
	}
	
	private static String acharCaminhoPastaJava()
	{
		LinkedList<String> enderecosPastasArquivosDeProgramas = 
				acharCaminhoAtePastasArquivosDeProgramas();
		for(int j = 0; j < enderecosPastasArquivosDeProgramas.size(); j++)
		{
			String enderecoPastaArquivosDeProgramas = 
					enderecosPastasArquivosDeProgramas.get(j);
			File pastaArquivosDeProgramas = new File(enderecoPastaArquivosDeProgramas);
			if(pastaArquivosDeProgramas.exists() == true)
			{
				File [] arquivosDoDiretorioParaExplorar = pastaArquivosDeProgramas.listFiles();
				for(int i = 0; i < arquivosDoDiretorioParaExplorar.length; i++)
				{
					File subdiretorioDeArquivosDeProgramas = arquivosDoDiretorioParaExplorar[i];
					if(subdiretorioDeArquivosDeProgramas.getName().compareToIgnoreCase("java") == 0)
					{
						return subdiretorioDeArquivosDeProgramas.getAbsolutePath();
					}
				}
			}
		}
		
		//nao achamos java 
		return "pasta java nao encontrada";
	}
	
	private static LinkedList<String> acharCaminhoAtePastasArquivosDeProgramas()
	{
		LinkedList<String> enderecosPastasArquivosDeProgramas = new LinkedList<String>();
		File diretorioRoot = new File("C:/");
		
		File [] arquivosDoDiretorioParaExplorar = diretorioRoot.listFiles();
		for(int i = 0; i < arquivosDoDiretorioParaExplorar.length; i++)
		{
			File subdiretorioDeRoot = arquivosDoDiretorioParaExplorar[i];
			String nomeDoSubdiretorio = subdiretorioDeRoot.getName().toLowerCase();
			if(nomeDoSubdiretorio.contains("program files")||
					nomeDoSubdiretorio.contains("arquivos de programas") ||
					nomeDoSubdiretorio.contains("arquivo de programas"))
			{
				
				enderecosPastasArquivosDeProgramas.add(subdiretorioDeRoot.getAbsolutePath());
			}
		}
		
		return enderecosPastasArquivosDeProgramas;
	}

}
